package com.woniuxy.controller;

import com.woniuxy.entity.DTO.algorithm.UserChurnDTO;
import com.woniuxy.service.IUserChurnService;
import com.woniuxy.util.PageResult;
import com.woniuxy.util.ResponseData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @Author 陈华庆
 * @Date 2025/7/23 4:13
 * @Description TODO
 * 用户流失预警控制器
 * 提供用户活跃度分析及流失风险评估API
 */
/*
- 1.
数据来源 ：通过 all_user 表获取用户基本信息，通过 article_like 表分析用户互动行为
- 2.
风险评估模型 ：结合未活跃天数和历史活跃频率进行综合评估
- 3.
风险等级划分 ：
- 高风险：超过30天未活跃或风险分数≥70
- 中风险：超过15天未活跃或风险分数≥40
- 低风险：超过7天未活跃或风险分数≥20
- 4.
分页查询 ：支持分页获取高风险用户列表，便于管理后台展示
- 5.
可扩展性 ：模型参数（风险阈值、历史窗口）集中定义，便于后续调优
 */
@RestController
@RequestMapping("/user/churn")
public class UserChurnController {

    @Autowired
    private IUserChurnService userChurnService;

    /**
     * 获取高流失风险用户列表
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 分页的高风险用户列表
     */
    @GetMapping("/high-risk")
    public ResponseData<PageResult<UserChurnDTO>> getHighRiskUsers(
            @RequestParam(name = "pageNum",defaultValue = "1") Integer pageNum,
            @RequestParam(name = "pageSize",defaultValue = "10") Integer pageSize) {
        return userChurnService.getHighRiskUsers(pageNum, pageSize);
    }

    /**
     * 评估单个用户流失风险
     * @param userId 用户ID
     * @return 用户流失风险详情
     */
    @GetMapping("/evaluate/{userId}")
    public ResponseData<UserChurnDTO> evaluateUserChurnRisk(@PathVariable("userId") Long userId) {
        return userChurnService.evaluateUserChurnRisk(userId);
    }
}